<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>第1章 遇见PhalApi - 初识PhalApi | PhalApi(π框架) - PHP轻量级开源接口框架 - 助你创造价值！</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <meta content="yes" name="apple-mobile-web-app-capable">
    <meta content="black" name="apple-mobile-web-app-status-bar-style">
    <meta content="telephone=no" name="format-detection">
    <meta content="email=no" name="format-detection">
    <meta name="Author" content="PhalApi,ecitlm,dogstar">
    <meta name="description" content="第1章 遇见PhalApi，PhalApi是一个PHP轻量级开源接口框架，致力于快速开发接口服务。支持HTTP/SOAP/RPC等协议，可用于搭建接口/微服务/RESTful接口/Web Services。我们不断更新，保持生气；为接口负责，为开源负责！并承诺永久免费！">
    <meta name="keywords" content="PhalApi,phalapi,phalapi接口开发,后台接口开发,后台接口开发框架,接口开发,接口框架,开源接口框架,PHP后台接口开发,PHP接口开发,PHP接口框架,PHP后台接口框架,phalapi官网,PHP接口框架,php接口开发框架,php接口开发,php web框架,π框架,π开发框架,π接口框架,π接口开发框架,api接口,php接口,phpapi,,初识PhalApi,电子书,探索接口服务开发的技艺,接口服务,开发技艺,免费电子书,PhalApi电子书,PhalApi书籍">

    <link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" media="screen">
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css" media="screen">
    <link rel="stylesheet" href="../css/main.css" />
    <link rel="stylesheet" href="../css/loading_bar.css" />
    <link rel="icon" href="http://webtools.qiniudn.com/dog_catch.png" type="image/x-icon" />
    <script src="../js/pace.min.js"></script>
	
	<!-- 代码高亮 -->
	<link rel="stylesheet" href="../css/highlight.min.css">
	<script src="../js/highlight.min.js"></script>
	<script>hljs.initHighlightingOnLoad();</script>
    
</head>

<body>
    <!-- navbar start -->
    <div class="navbar navbar-default navbar-fixed-top" id="mainnav" role="navigation">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand website_name" href="/"><!-- <span>PhalApi</span> --><strong></strong></a>
            </div>
            <div class="navbar-collapse collapse" aria-expanded="false" style="height: 1px;">
                <ul class="nav navbar-nav navbar-right" id="nav_bar">
                    <li><a href="https://www.phalapi.net/"><span class="glyphicon glyphicon-home"></span></a></li>

                    <li ><a href="https://www.phalapi.net/wikis/">1.x 文档</a></li>
                    <li><a href="http://docs.phalapi.net/#/v2.0/" target="_blank">2.x 文档</a></li>
                    <li><a href="#">|</a></li>

                    <li><a href="https://www.phalapi.net/download.html">下载</a></li>
                    <li class="active"><a href="https://www.phalapi.net/book">书籍</a></li>
                    <li><a href="https://www.phalapi.net/wikis/8-1.html" >视频</a></li>
                    <li><a href="https://www.phalapi.net/donate.html">贡献</a></li>
                    <li><a href="http://demo2.phalapi.net/docss.php" target="_blank">体验</a></li>
                    <li><a href="http://qa.phalapi.net/" target="_blank">社区</a></li>
                    <li><a href="http://www.okayapi.com" target="_blank">小白</a></li>
                </ul>
            </div>
            <!--/.nav-collapse -->
        </div>
    </div>
    <!-- navbar end -->


    <div id="content">
        <div class="container">

                    <nav class="navbar navbar-default ">
        <div class="container">
        <div id="navbar">
        <ul class="nav navbar-nav">
        <li><a target="_blank" href="https://www.phalapi.net/book/">《初识PhalApi》</a></li>
        <li><a target="_blank" href="http://www.ituring.com.cn/book/2405">图灵社区</a></li>
        <li><a target="_blank" href="https://www.gitbook.com/book/phalapi/meet_phalapi/details">Gitbook</a></li>
        <li><a target="_blank" href="https://github.com/phalapi/meet">Github</a></li>
        </div><!--/.nav-collapse -->
        </div>
        </nav>

            <div class="row row-md-flex row-md-flex-wrap">
                <h1>第1章 遇见PhalApi</h1>
<p><strong>古云此日足可惜，吾辈更应惜秒阴。——董必武《惜时》</strong>  </p>
<h2>1.1 PhalApi是什么？</h2>
<p>PhalApi，简称：π框架，是一个国产开源的PHP轻量级接口开发框架，专注于接口服务开发，支持HTTP/SOAP/RPC协议，可用于快速搭建微服务、RESTful接口或Web Services。</p>
<h2>1.2 PhalApi的前世今生</h2>
<h3>1.2.1 前世：个人框架zenphpWS3</h3>
<p>PhalApi最初是始于2012年个人毕业论文的项目开发需要。</p>
<p>由于当时课题是开发一个基于旅游轨迹的图片分享平台，需要开发一套提供给App客户端使用的后台服务接口。 然而，在实际项目开发中，发现身边很多团队在使用PHP进行接口开发时，往往是很简单，或者说是很粗爆的，如直接使用fopen()函数获取远程接口的执行结果再加以处理。尴尬的是，当时在寻找一个可以用于快速后台接口开发的PHP框架时，没找到合适贴切的开源框架。准确来说来，没找到一个专注于接口开发的开源框架。</p>
<p>基于此，萌生了自主研发一个接口框架的想法。经过到图书馆和网上查阅整理多方资料、知识和理论，和一段时间的设计及编码后，便延生了最初的接口框架，并命名为： zenphpWS3。 其中，zen表示开源、php表示用PHP开发、WS表示Web Service、3表示支持SOAP、HTTP或RPC三种协议以及JSON、XML或数组等多种格式的返回。</p>
<p>zenphpWS3很好地支撑毕业论文项目的开发，并初步具备了一个框架的基本特质与思想。但经过一年的全职工作，以及学习、研究众多优秀开源构架后，发现还存在很多有待改善的地方。所以，当再次使用zenphpWS3进行新接口项目开发时，我便在开发具体应用接口服务的同时，也有意识地在对接口框架进行完善和重构，并融入框架所需要的特性、原则和模式。如可重用、IoC、SOILD设计原则、组件和容器等。至此，通过不断演进迭代，一个更好的接口框架便慢慢浮现了出来。</p>
<h3>1.2.2 今生：开源框架PhalApi</h3>
<p>与此同时，我们迎来了移动互联网的浪潮。很多大的企业都提供了开放平台，如腾讯开放平台、新浪微博开放平台、优酷开放平台等。而对于中型公司或者初创团队，则需要为自主的APP开发提供特定领域业务功能的接口服务。也就是说，越来越多的项目需要像我当初那样开发接口服务，但也可能同样会像我当初那样面临找不到合适贴切开源框架的困境。</p>
<p>秉着希望能帮助更多同学快速开发接口项目的初衷，我便再次对此接口框架进行重构优化，于2015年正式走向开源，并更名为：PhalApi，简称：π框架。</p>
<p>正如PHPUnit的作者Sebastian Bergmann所说的那样：</p>
<blockquote>
<p>Driven by his passion to help developers build better software.</p>
</blockquote>
<p>同样，我们希望通过PhalApi，可以：</p>
<ul>
<li>一来，支撑轻量级接口项目的快速开发；</li>
<li>二来，阐明如何更好地进行接口开发、设计和维护；</li>
<li>三来，分享优秀的编程思想、实用的工具和精益求精的技艺。</li>
</ul>
<p>最初的接口框架就在这样的背景和研究下出来了。</p>
<h2>1.3 接口，从简单开始！</h2>
<h3>1.3.1 一个隐喻</h3>
<p>假设我们有一条这样的表达式：</p>
<pre><code>1 + 1 = 2</code></pre>
<p>显然，这是非常简单，且易于理解的。但倘若我们在中间添加一些复杂性后：</p>
<pre><code>1 + (96 - 867 + 700 - 6 + 7 - 30/10 + 100  - 27) +  1 = 2</code></pre>
<p>同样可以获得相同的结果，但表达却羞涩难懂，且容易出错。</p>
<p>你可能会觉得好笑：怎么可能会有人把这么简单的问题复杂化呢？还编写这么累赘的代码？然而，如果你回顾一下以往接触过的项目或留意一下身边正在运行的代码，你会发现，这种情况是真实存在的。</p>
<p>在不同的领域开发不同的项目，各自需求不同，所编写的代码也就不尽相同。纵使这样，即使我们不能把代码简化到最理想的状态，但至少可以通过努力以达到“编写人容易理解的代码”这一最佳状态。一如这样：</p>
<pre><code>1 + (0) +  1 = 2</code></pre>
<h3>1.3.2 PhalApi框架所做的</h3>
<p>使用PhalApi框架进行接口项目开发，我们不能保证最终编写出来的项目代码一定会“短而美”，因为更多的代码编写来自于你双手的输入、来自你自己切身的思考和设计。但我们希望PhalApi可以在支持接口快速开发的基础上，为你和更多开发团队提供关于接口项目开发的一些技艺、参考和帮助。</p>
<p>所以，与其他很多关注服务器性能的框架不同， PhalApi更加关注的是人的心情、开发效率和团队合作，而这些正是通过约束与规范、测试驱动开发、自动化工具、持续集成和敏捷开发等途径可以达成的 。</p>
<p>这一切一切，都要从代码的编写开始。毕竟我们作为专业软件开发人士，代码是我们连接世界的媒介。而接口代码的编写，又应从简单开始。</p>
<p>泡一杯咖啡，让我们开始吧。</p>
<h2>1.4 下载与安装</h2>
<p>PhalApi框架的最新版本的代码，可以到Github进行下载。  </p>
<pre><code>https://github.com/phalapi/phalapi  </code></pre>
<p>也可以到国内的码云上进行下载。  </p>
<pre><code>http://git.oschina.net/dogstar/PhalApi</code></pre>
<p>这两个仓库的代码会同步一致，开发人员可根据自己的喜欢选择使用。 </p>
<p>其中，release分支为中文稳定版；release-en分支为英文稳定版。需要使用PHP 5.3.3及以上版本。  </p>
<p>安装如同其他的框架一样，将下载的框架压缩包上传到服务器后解压即可。结合自己的喜爱与项目需要，可以采用Apache、XAMPP、Microsoft IIS等。根据使用的服务器不同，配置也不一样。  </p>
<p>本书所使用的环境是：  </p>
<ul>
<li>PHP 5.3.10  </li>
<li>Nginx 1.1.19   </li>
<li>PhalApi 1.4.0  </li>
<li>Ubuntu 12.04（64位） </li>
</ul>
<p>所以在这里，本书统一约定使用PhaApi 1.4.0 版本，并且推荐使用Nginx作为服务器。以这里的环境安装为例，假设框架解压的目录为：<code>/path/to/PhalApi/Public</code>，则首先需要添加Nginx配置文件<code>api.phalapi.net</code>，然后重启Nginx，最后添加HOST并访问。  </p>
<p>即首先，新建一个配置文件：  </p>
<pre><code class="language-bash"># vim /etc/nginx/sites-available/api.phalapi.net</code></pre>
<p>并添加以下参考配置：  </p>
<pre><code>server {
    listen 80;
    server_name api.phalapi.net;

    root /path/to/PhalApi/Public;
    charset utf-8;

    location / {
        index index.html index.htm index.php;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    access_log logs/api.phalapi.net.access.log;
    error_log logs/api.phalapi.net.error.log;
}</code></pre>
<p>接着，创建软链：  </p>
<pre><code class="language-bash"># ln -s /etc/nginx/sites-available/api.phalapi.net /etc/nginx/sites-enabled/api.phalapi.net</code></pre>
<p>重启Nginx服务：  </p>
<pre><code class="language-bash">$ /etc/init.d/nginx restart</code></pre>
<p>并在服务器的<code>/etc/hosts</code>文件里添加：  </p>
<pre><code>127.0.0.1 api.phalapi.net</code></pre>
<p>最后在浏览器访问Demo的默认接口服务，测试接口是否可以正常访问，如请求：  </p>
<pre><code>http://api.phalapi.net/demo/</code></pre>
<p>正常情况下，会看到类似以下这样的返回结果。  </p>
<pre><code>{
    "ret": 200,
    "data": {
        "title": "Hello World!",
        "content": "PHPer您好，欢迎使用PhalApi！",
        "version": "1.4.0",
        "time": 1492346885
    },
    "msg": ""
}</code></pre>
<blockquote>
<p><strong>温馨提示：</strong> 为了可视化JSON结果，Chrome浏览器可安装JSONView扩展，Firefox可以安装JSON-handel扩展。  </p>
</blockquote>
<h2>1.5 创建一个新项目</h2>
<p>安装好后，可以使用在线可视化安装向导来创建一个新的项目。  </p>
<p>安装向导在目录<code>./Public/install/</code>下，在浏览器输入<code>http://api.phalapi.net/install/</code>便可访问此安装向导。安装界面如下：  </p>
<p><img src="http://cdn7.phalapi.net/ch-1-api-install.png" alt="图1-1 安装向导" />  </p>
<p>图1-1 安装向导  </p>
<p>随后按照提示，一步步操作即可。创建新项目过程，会要求输入项目名称。假设我们需要为商城创建一个项目，并命名为：shop，那么安装完成后访问效果如下。  </p>
<p><img src="http://cdn7.phalapi.net/ch-1-shop-default-api.png" alt="图1-2 新建shop项目的运行效果" />  </p>
<p>图1-2 新建shop项目的运行效果  </p>
<p>这时，可以看到新建了以下目录和文件。  </p>
<pre><code class="language-bash">$ tree ./Shop/ ./Public/shop/
./Shop/
├── Api
│   └── Default.php
├── Common
├── Domain
├── Model
└── Tests
    ....

./Public/shop/
├── checkApiParams.php
├── index.php
└── listAllApis.php</code></pre>
<p>对于各个目录，简单说明如下：  </p>
<ul>
<li>./Shop：放置项目源代码，每个项目对应一个目录  </li>
<li>./Shop/Api：接口服务类目录</li>
<li>./Shop/Domain：领域业务类目录</li>
<li>./Shop/Model：数据模型类目录</li>
<li>./Shop/Common：公共目录</li>
<li>./Shop/Tests：单元测试目录</li>
</ul>
<p>以上都是外界不可直接访问的目录，下面则是对外可访问的目录和文件。  </p>
<ul>
<li>./Public/shop：外部可访问的目录</li>
<li>./Public/shop/index.php：入口文件</li>
<li>./Public/shop/listAllApis.php：在线接口列表文档</li>
<li>./Public/shop/checkApiParams.php：在线接口详情文档</li>
</ul>
<p>关于各个目录和各个文件的作用，后续会作进一步说明。  </p>
<p>至此，我们已经取到了阶段性的成果。我们完成了框架的安装与部署，还创建了一个新的项目。接下来，让我们继续探索一下，如何在PhalApi下进行具体的接口编码开发。  </p>
<h2>1.6 Hello World</h2>
<p>遵循国际惯例，这里编写的第一个接口也是Hello World。这是一个非常简单的接口，主要功能是返回“Hello World”这串字符。　　</p>
<p>继续使用上面已创建的shop项目。首先，创建一个接口类文件<code>./Shop/Api/Welcome.php</code>，并在这里实现主要的功能。  </p>
<pre><code class="language-php">// ./Shop/Api/Welcome.php
&lt;?php
class Api_Welcome extends PhalApi_Api {

    public function say() {
        return 'Hello World';
    }
}</code></pre>
<p>然后，便可以对接口进行访问了。如最简单的方式，还是使用浏览器来访问。接口访问的格式为：接口域名 + 入口路径 + ?service=XXX.XXX，所以此接口服务对应的链接为： </p>
<pre><code>http://api.phalapi.net/shop/?service=Welcome.Say</code></pre>
<p>结果默认以JSON格式返回，即正常情况下会看到：  </p>
<pre><code>{"ret":200,"data":"Hello World","msg":""}</code></pre>
<p>以上代码和运行结果截图如下。  </p>
<p><img src="http://cdn7.phalapi.net/ch-1-shop-welcome.png" alt="图 1-3 Hello World代码与运行结果" />  </p>
<p>图1-3 Hello World代码与运行结果</p>
<p>是不是发现接口开发很简单？  </p>
<p>当然，这里只是一个很简单的Hello World示例。实际项目开发中，所遇到的业务场景会更为复杂，所面临的技术挑战也会更为深奥。虽然是一个简单示例，但也很好地帮助了我们对PhalApi的开发和使用有了感性的认识，同时察觉到在进行接口开发时需要时刻保持前瞻性和注重细节。例如细心的读者会发现，这里返回的是一个字符串，若日后需要在这个接口添加其他字段的返回则难以保持向前兼容性。所以，离细致的接口开发，我们还有一段路要走。希望这本书，可以陪你更好、更顺畅、更愉悦地度过这段美妙的旅途！  </p>
<h2>1.7 对PhalApi框架的抉择</h2>
<p>能使用框架来进行项目开发，和知道为何使用此框架进行项目开发明显不同。对框架的选择，名义上是架构师的职责，但对于充满好奇心和有着更强求知欲的开发人员来说，同样应该给予关注。  </p>
<p>之所以选择一个框架进行项目开发，表面上是为了减少不必要的重复代码；但更深层次，则是为了减少开发周期、统一开发规范、降低项目风险，最终快速迭代、持续交付，不致于项目失控。  </p>
<p>在决定使用PhalApi框架前，对于此框架是否适用于即将启动的项目进行一番思索，是大有裨益的。通过<strong>推定框架</strong>，有助于避免因采用不当的框架而对项目造成不必要的阻力。 </p>
<h3>1.7.1 适用的场景和项目</h3>
<p>PhalApi框架特别适用于当前为各 <strong>移动App</strong> 或其他后台系统开发远程接口服务。可用于搭建高访问量、大数据存储的接口项目，可以挂靠多个接口项目，也可以很好地支持多个终端、多个版本、多个访问入口。此外，还提供各种可重用的扩展类库，便于快速开发。   </p>
<p>基于此，我们采用了主流设计，即将框架设计成默认使用HTTP协议访问，并以JSON格式返回请求结果。因为HTTP协议和JSON格式，都是当前大众所熟悉的。  </p>
<h3>1.7.2 敏捷开发和快速交付</h3>
<p>虽然框架和工程实践间没有必然的联系，但我想其中应该会有一些微妙的联系。<strong>一种代码编写的方式会形成一种开发的风格；一种开发风格会奠定一个团队的合作氛围；一个团队的合作氛围会决定项目交付的质量。</strong> 而PhalApi所提倡和希望做到的正是通过让接口开发更简单，让后台开发人员心情更愉悦，从而为客户端提供高质量的接口服务。此外，结合重构、测试驱动开发和持续集成等，可以让你的项目如虎添翼，在快速交付的同时，体验编码开发的乐趣。  </p>
<h3>1.7.3 约束和关注</h3>
<p><strong>架构约束程序。</strong> 约束有时会让开发者处处受阻。但好的约束能够统一规范而不致于项目代码凌乱不堪，也不会轻易地允许低级开发新手犯下一些本可避免的BUG。正如，我们都讨厌等待红绿灯，但我们必须肯定它对交通和生命安全保障的作用。  </p>
<h3>1.7.4 复杂领域业务的应对和解决方案</h3>
<p>正如前面说到的，我们关注在海量数据下为移动App提供稳定的接口，我们提倡敏捷开发下的快速交付。所以我们去掉与接口开发无关的功能，没有提供视图渲染和模板解析的操作。  </p>
<p>但只是这样而已吗？  </p>
<p>不！我们还关注对复杂领域业务的应对和解决方案。  </p>
<p>如果我们PhalApi框架所关注的，也是你们项目所关注的，那么我们有理由相信PhalApi能为你的项目带来很多友好的约束和贴心的帮助。  </p>
<h3>1.7.5 框架的性能</h3>
<p>很多框架都要强调其能提供的性能，然后PHP本身就是动态的脚本语言，要想提高项目的运行速度，就是要进行减法，即减少不必要的PHP代码。但是前面强调性能的框架则做了与其承诺矛盾的做法：为框架增添了很多项目可能不需要用到的功能。明显地就是一系列既定的执行流程和侦听事件、回调、调度等等。而这些，势必会对性能有所影响，特别当应用项目不需要这些特性却又不能定制简化时，框架所谓的强悍功能会适得其反。  </p>
<p>对于这一块，我们则提供了极大的空间。因为，入口和初始化文件，我们可以自由定制。除了一些必要的加载外，很多都可以支持自定义和定制化。而且我们也使用Autobench进行了压力测试和通过XHprof进行了性能剖析，证明PhalApi框架在性能上确实如我们预料的那样——快！  </p>
<h3>1.7.6 成熟度与学习成本</h3>
<p>不可否认，PhalApi还是太年轻了。PhalApi正式开源于2015年1月，但是我们一直都在努力完善，我们尽量“减少不必要的创新”，我们坚持像恒星一般完美支持框架升级，我们尽量提供优秀的文档、及时的沟通和技术帮助。更为重要的是，这是一个不只为框架而框架的PhalApi框架。  </p>
<p>“人法地，地法天，天法道，道法自然”。以前经常听说老子这句话，但对于其中的意思最初是不明白的，甚至误解的。“法”字，在这里是学习、效仿的意思。我则把这句稍微简化了一下，精简成：<strong>人法自然</strong>。在自然界中，无论是石头缝之间的小草，公园里植物，还是山上的生态环境，不管你来不来，它们都一直欣欣而向荣、充满活力。我们应该学习自然这种品质，忠于自己。PhalApi也一样，一直在努力成长，保持生气，为开源社区负责。不会因为使用的人多了就迷乱，也不会因为使用的人少就停止不前。  </p>
<p>在开发过程中，对于PhalApi不能很好解决和支持的问题，你也可以考虑尝试优化框架，将某一目标或属性提升至架构，其他团队成员则可从中获益。相信你会发现，在PhalApi下，你可以轻松做到这一点： <strong>小步快跑下的浮现式设计</strong> 。  </p>
<h2>本章小结</h2>
<p>PhalApi是一个国产开源的PHP轻量级接口开发框架，专注于接口服务开发。对于接口，我们应该从简单开始！但在决定选择PhalApi进行项目开发前，应该先评估一番，看下此框架是否满足待开启的项目的要求。在这一章，我们还学习了PhalApi的下载和安装，以及如何创建一个新项目，也尝试编写了第一个Hello World程序。做好了这些准备后，我们便可以踏上新的征途。但在成为一名娴熟的工匠之前，我们还需要掌握一些基础知识。接下来——</p>
<h2>参考资料</h2>
<p>《恰如其份的框架》推定框架。<br />
《浮现式设计》  </p>
            </div>
        </div>
    </div>

 <!-- 广告位 -->
<div class="grid-wrapper desktop-only" id="footer_ad">
    <p align="center" id="footer_ad_p">
    <!--
    <a href="http://docs.api.phalapi.net/#/"
        target="blank"><img width="950" height="100" src="http://cdn7.phalapi.net/20170926224247_3f2d154243325d8d70aba4ce24b90416"></a>
    <a href="http://cdn7.phalapi.net/%E6%88%91%E7%9A%84%E5%90%8D%E5%AD%97%E5%8F%AB%EF%BC%9A%CF%80%E6%A1%86%E6%9E%B6%20-%20PhalApi%202016%E5%B9%B4%E5%BA%A6%E5%BC%80%E6%BA%90%E6%80%BB%E7%BB%93%20-%20%E5%AE%98%E6%96%B9%E5%87%BA%E5%93%81.pdf" target="blank"><img width="950" height="100" src="http://cdn7.phalapi.net/ad_20170104.png"></a>
    -->
    <a href="http://www.itran.cc/" target="blank"><img width="950" height="100" src="http://cdn71.phalapi.net/images/9/69/b88bc92455dc1239f9a5bf8d72929.png"></a>
    <!--
    <a href="http://web-tools.phalapi.net/" target="blank"><img width="950" height="100" src="http://cdn71.phalapi.net/images/7/d0/88f523566c482296aecc43d185ca2.png"></a>
    -->
	</p>
</div>

        <!-- footer -->
        <div class="footer">
            <div class="link container ">
                <div class=" col-xs-7 col-sm-7 col-md-7 col-lg-7 ">
                    <h3>PhalApi (π框架)</h3>
                    <p>一个轻量级PHP开源接口框架，专注于接口服务开发，支持HTTP/SOAP/RPC协议，拥有自动生成的在线文档、多种开发语言的客户端SDK包以及可重用的扩展类库，可用于快速搭建微服务、RESTful接口或Web
                        Services。</p>
                    <!-- <p>:</p> -->
                    <a href="https://www.phalapi.net/" target="_blank"> PhalApi </a>
                    <span>|</span>
                    <a href="http://qa.phalapi.net/" target="_blank">社区</a>
                    <span>|</span>
                    <a href="download.html" target="_blank">下载</a>
                    <span>|</span>
                    <a href="/wikis/">文档</a>
                    <span>|</span>
                    <a href="http://www.ituring.com.cn/book/2405" target="_blank">书籍</a>
                    <span>|</span>
                    <a href="http://demo.phalapi.net/listAllApis.php" target="_blank">体验</a>
                    <span>|</span>
                    <a href="donate.html" target="_blank">贡献</a>
                    <span>|</span>
                    <a href="https://github.com/phalapi/phalapi-library" target="_blank">扩展</a>
                    <span>|</span>
                    <a href="/license.html" target="_blank">许可</a>
                    <span>|</span>
                    <a href="/about.html" target="_blank">关于</a>
                    <span>|</span>
                    <a href="https://www.phalapi.net/wikis/en/" target="_blank">English</a>

                </div>
                <div class=" col-xs-5 col-sm-5 col-md-5 col-lg-5 contact_us ">
                    <h3>联系我们</h3>
                    <a href="https://github.com/phalapi/phalapi"><img src="../images/github.png" alt="github" /></a>
                    <a href="http://weibo.com/p/100808d236e99beb645bfb56ed1c37dde9b8bd?k=phalapi%E5%BC%80%E6%BA%90%E6%A1%86%E6%9E%B6&from=501&_from_=huati_topic"><img src="../images/weibo.png"  alt="weibo" /></a>
                    <a href="http://cdn71.phalapi.net/images/1/b0/894fde762850cb11250253f7d5ede.png"><img src="../images/zfb.png"  alt="zfb" /></a>
					<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=f16292029e59975d4ccfccc70ed87aa5c5646df512e83b0e9e1270e8368be461"><img border="0" src="../images/qq.png" alt="π框架 - PhalApi交流群②" title="π框架 - PhalApi交流群②"></a>
                    <a href="http://git.oschina.net/dogstar/PhalApi"><img src="../images/git-oschina.png"  alt="git-oschina" /></a>
                </div>
                <div class="cls"></div>
                <div class="text-center copy_right"> ©2015-2017 PhalApi All Rights Reserved. <a href="http://www.miitbeian.gov.cn" target="_blank">粤ICP备15028808号</a>

				<script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1255326144'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s4.cnzz.com/z_stat.php%3Fid%3D1255326144%26show%3Dpic' type='text/javascript'%3E%3C/script%3E"));</script>
                </div>
            </div>
        </div>
    </div>


    <a href="https://github.com/phalapi"><img id="gitHub_fllow" style="position: fixed; top: 0; right: 0; border: 0;z-index:9999" src="https://camo.githubusercontent.com/652c5b9acfaddf3a9c326fa6bde407b87f7be0f4/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6f72616e67655f6666373630302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png"></a>


    <script src="../js/jquery-1.11.1.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</body>


<script>
$(function(){
    setInterval(switchAd, 5000);
});

var ad_list = [
    {"url":"http://www.itran.cc/", "img": "http://cdn71.phalapi.net/images/9/69/b88bc92455dc1239f9a5bf8d72929.png"},
    {"url":"http://www.okayapi.com/", "img": "http://cdn7.phalapi.net/20170926224247_3f2d154243325d8d70aba4ce24b90416"},
    {"url":"http://web-tools.phalapi.net/", "img":"http://cdn71.phalapi.net/images/7/d0/88f523566c482296aecc43d185ca2.png"}
];
var ad_pos = 0;

function switchAd() {
    ad_pos = ad_pos + 1;
    ad_pos = ad_pos % ad_list.length;

    var url = ad_list[ad_pos].url;
    var img = ad_list[ad_pos].img;

    $("#footer_ad_p").html('<a href="'+ url +'" target="blank"><img width="960" height="100" src="' + img + '"></a>');
}
</script>

</html>
